AI 時代,做一份表單只要 20 分鐘:R Shiny + AI 的最短路徑

AI 工作流
R
Shiny
表單
上一篇談了 VBA / Access / LibreOffice / PDF 四種傳統做法的痛點。這一篇走另一條路:用 R Shiny 寫表單,AI 幫你生程式碼。從一份需求描述、到瀏覽器上跑起來,實際只要 20 分鐘。這篇會拆解為什麼 R Shiny 適合當表單、AI 具體幫你生什麼、以及一份 60 行程式碼能撐起多少功能。
發佈於

2026年7月7日

從上一篇接下來

上一篇《AI 之前,做一份「可以填的表單」要走哪條路?》整理了四條傳統路:Excel + VBA、Access、LibreOffice Base、可填寫 PDF。四條路都能做出結果,但每一條都要學一堆東西、每一條都在維護時卡住

這篇走另一條路。

為什麼是 R Shiny

R Shiny 是 R 語言的「網頁 App 框架」。你寫幾十行 R,執行一下,瀏覽器上就跑出一個網頁。使用者在這個網頁上填表、按按鈕、下載檔案,就跟一般網站一樣。

它剛好對上表單的所有需求:

  • 在瀏覽器上跑——手機、平板、任何裝置都能填,不必裝任何東西
  • 輸入元件全套:文字、下拉、單選、複選、日期、滑桿、檔案上傳,都有內建元件
  • 資料立刻能算、立刻能存:因為背後是 R,資料進來當下就可以做統計、做圖、寫回檔案
  • 免費、跨平台:R 是 open source,Windows / Mac / Linux 都跑
  • 佈署選擇多:本機跑、公司內網跑、雲端(shinyapps.io / Posit Connect)跑,任選

以前 R Shiny 的門檻在「要會寫 R」。這個門檻,AI 已經幫你降下來了。

一個真實的表單,60 行 R 程式

下面這個範例只有約 60 行,功能包含:

  • 三個輸入欄位:姓名(文字)、電話(文字)、地區(下拉:北中南東)
  • 新增資料按鈕:把當下填的內容加進表格
  • 表格即時顯示:每按一次新增,畫面上的表格就多一列
  • 下載 Excel 按鈕:把累積的資料下載成 .xlsx

看程式碼就懂了:

library(shiny)
library(writexl)

# 介面
ui <- fluidPage(
  titlePanel("資料管理"),
  sidebarLayout(
    sidebarPanel(
      textInput("name", "姓名"),
      textInput("phone", "電話"),
      selectInput("region", "地區",
                  choices = c("北部", "中部", "南部", "東部")),
      actionButton("add", "新增資料"),
      hr(),
      downloadButton("downloadData", "下載資料")
    ),
    mainPanel(
      tableOutput("dataTable")
    )
  )
)

# 邏輯
server <- function(input, output, session) {
  data <- reactiveVal(data.frame(
    姓名 = character(), 電話 = character(), 地區 = character()
  ))

  observeEvent(input$add, {
    new_entry <- data.frame(
      姓名 = input$name,
      電話 = input$phone,
      地區 = input$region
    )
    data(rbind(data(), new_entry))

    # 清空欄位,等下一筆
    updateTextInput(session, "name", value = "")
    updateTextInput(session, "phone", value = "")
  })

  output$dataTable <- renderTable({ data() })

  output$downloadData <- downloadHandler(
    filename = function() paste0("輸入資料", Sys.Date(), ".xlsx"),
    content  = function(file) write_xlsx(data(), file)
  )
}

shinyApp(ui = ui, server = server)

這份程式碼放到 RStudio 裡按 Run App,瀏覽器立刻打開表單畫面。你在表格裡輸入、按新增、按下載——都能用

AI 具體幫你做什麼

你不用背 textInput 的參數、也不用記 reactiveVal 是什麼。AI(Claude / ChatGPT / Copilot 都可以)能做的事很清楚:

① 從一句話生出骨架

「幫我用 R Shiny 寫一個表單,欄位有:姓名、電話、地區(下拉:北中南東)、性別、出生日期。可以新增、可以下載成 Excel。」

AI 會直接產出上面那 60 行的雛形。可能不完美,但跑得起來

② 加欄位、加驗證

「把電話改成必填、格式要 09xx-xxx-xxx」——AI 會幫你加 validate()、regex、還有錯誤訊息。

③ 資料存到資料庫、不只 Excel

「不要下載,改成每筆直接寫進 SQLite」——AI 會幫你換 DBI + RSQLite,改幾行就好。

④ 加使用者登入

「加一個登入畫面,帳號與雜湊密碼從環境變數或身分驗證服務讀取」——AI 可以用 shinymanagershinyauthr 或外部身分服務建立登入流程。密碼與密鑰不要直接寫在程式碼裡。

⑤ 佈署上線

「怎麼把這個 App 放到 shinyapps.io 讓別人連進來?」——AI 會給你完整的 rsconnect::deployApp() 指令與帳號設定流程。

這五件事,都不用你懂 Shiny 的細節。你只需要知道自己要什麼、看得懂 AI 給你的程式碼大致在做什麼,然後把它跑起來。

對比上一篇的四條路

回到上一篇那張表,把 R Shiny 加進去:

方案 學習成本 多人同時填 跨裝置 授權費 AI 幫得上忙
Excel + VBA 有(Office) 部分
Access 表單 ⚠️(易鎖死) ❌(Windows only)
LibreOffice Base 中高 ⚠️ 免費
可填寫 PDF 低(會用軟體) ✅(發 30 份) 有(Acrobat Pro)
R Shiny + AI 低(AI 代寫) ✅(瀏覽器) 免費 全流程

這條路的邊界

R Shiny + AI 不是萬能。有幾件事它並不擅長:

① 完全客製的 UI 動畫、複雜的前端互動

Shiny 的元件雖然齊全,但要做完全客製的視覺設計(例如像 Notion 那種細膩的互動),要花的力氣不比另外寫 React 少。日常內部用不太會遇到這個需求。

② 極高流量的公開網站

Shiny 一個 R process 服務一個或多個 session。要撐幾千個同時上線的使用者,需要 Posit Connect / ShinyProxy 這類商用方案,不是免費的。內部單位用完全沒問題。

③ 沒有 R 環境的電腦

要跑 Shiny,總得有一台裝了 R 的電腦(或雲端主機)。但你不需要每台電腦都裝——伺服器一台就夠,其他人瀏覽器連進來。

一個實用的起手式

如果你想試,我建議這樣走:

第 1 步:把上面 60 行貼進 RStudio

裝好 R + RStudio(都免費),開一個新的 app.R,把上面的程式碼貼進去。按 Run App——瀏覽器就會打開。先確認你的環境跑得起來,其他都可以之後再說。

第 2 步:改成你自己的欄位

把姓名、電話、地區改成你單位真正要收的東西。改的時候會遇到「多選要怎麼寫」、「日期怎麼放」——這時候問 AI:「Shiny 裡多選欄位怎麼寫?」直接貼答案回來試。

第 3 步:把資料存下來

downloadButton 是「等使用者按了才下載」——但你可能希望每筆進來就自動存下來。多人使用的 App 建議改寫 SQLite,透過 DBI + RSQLite 新增資料;這比多個連線同時追加 CSV 穩定。

第 4 步:讓別人連進來

同一台區網內?跟 AI 說:「怎麼讓 Shiny app 綁 0.0.0.0,讓區網內的人都能連?」——就是加一行 options(shiny.host = "0.0.0.0", shiny.port = 3838)

四步下來,一個能真正用的表單就在跑了。

這一系列的重點

上一篇:AI 之前,做表單有四條路,每條都要學一堆、每條都有痛點。

這一篇:AI 之後,門檻降到「你能描述你要什麼」——剩下的 AI 補上。

差別不是「多了一個工具選項」,是選擇工具的邏輯反過來了

以前是「我會 VBA,所以我用 VBA」;現在是「我要一個能跑在瀏覽器上、多人同時填、直接存資料庫的表單——AI 用 R Shiny 幫我寫」。工具選擇的第一步,從「我會什麼」變成「我要什麼」。

如果要用在正式單位流程

R Shiny + AI 很適合快速做出內部工具原型;若要長期使用,仍需要確認資料儲存、權限、備份、部署位置與維護責任。

相關方向可看:解決方案

回到頂端